﻿#define _CRT_SECURE_NO_WARNINGS

#include<iostream>
#include<stdlib.h>
#include<assert.h>

using namespace std;

////class A
////{
////public:
////	A(int i = 0)
////	{
////		_i = i;
////	}
////	void revise(int i)
////	{
////		_i = i;
////	}
////	int Get()
////	{
////		return _i;
////	}
////
////private:
////	int _i;
////};
////
////
////int main()
////{
////	A a1;
////	a1.revise(5);
////	cout << a1.Get() << endl;
////	return 0;
////}
//
//
//class Stack
//{
//public:
//	//成员函数
//	void Init(int n = 4)
//	{
//		
//	}
//
//	void Push(int x)
//	{
//		_a[top++] = x;
//	}
//
//	bool STEmpty(ST* pst)
//	{
//
//	}
//
//	int Top()
//	{
//		assert(top);
//		return _a[top - 1];
//	}
//
//	void Destroy()
//	{
//		fail(_a);
//		_a = nullptr;
//		_capacity = 0;
//		_top = 0;
//	}
//
//private:
//	int* _a;
//	size_t _capacity;
//	size_t _top;
//};
//
//
//class Date
//{
//public:
//	void Init(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//
//typedef struct ListNode
//{
//	int val;
//	struct ListNode* next;
//}ListNode;
//
//
//// 不再需要typedef，ListNodeCPP就可以代表类型
//struct ListNodeCPP
//{
//	void Init(int x)
//	{
//		next = nullptr;
//		val = x;
//	}
//
//	ListNodeCPP* next;
//	int val;
//};
//
//
//class Stack
//{
//	void Init(int n = 4)
//	{ }
//
//public:
//	void Push(int x)
//	{ }
//
//	bool STEmpty(ST* pst)
//	{ }
//
//	int Top()
//	{ }
//
//private:
//	void Destroy()
//	{ }
//
//private:
//	int* _a;
//	size_t _capacity;
//	size_t _top;
//};
//
//
//class Date
//{
//public:
//	void Init(int year, int month, int day);
//
//
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//void Date::Init(int year, int month, int day)
//{
//	_year = year;
//	_month = month;
//	_day = day;
//}
//
//
//int main()
//{
//	Date d1;
//	Date d2;
//	Date d3;
//
//	return 0;
//}

//
//class Date
//{
//public :
//	void Init(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	} 
//
//	void Print()
//	{
//		cout << _year << "/" << _month << "/" << _day << endl;
//	}
//
//private:
//	// 这⾥只是声明，没有开空间
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	// Date类实例化出对象d1和d2
//	Date d1;
//	Date d2;
//
//	d1.Init(2024, 3, 31);
//	d1.Print();
//
//	d2.Init(2024, 7, 5);
//	d2.Print();
//
//	return 0;
//}


//class A
//{
//	public :
//	void Print()
//	{
//		//...
//	}
//};
//int main()
//{
//	A a;
//	cout << sizeof(a) << endl;
//	return 0;
//}

//class Date
//{
//public:
//	void Init(Date* const this, year, int month, int day)
//	{
//		this->_year = year;
//		this->_month = month;
//		this->_day = day;
//	}
//
//	void Print(Date* const this)
//	{
//		cout << this->_year << "/" << this->_month << "/" << this->_day << endl;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	Date d1;
//	Date d2;
//
//	d1.Init(&d1, 2024, 3, 31);
//	d1.Print(&d1);
//
//	d2.Init(&d2, 2024, 7, 5);
//	d2.Print(&d2);
//
//	return 0;
//}

//#include<iostream>
//using namespace std;
//class A
//{
//	public :
//	void Print()
//	{
//		cout << "A::Print()" << endl;
//	}
//private:
//	int _a;
//};
//int main()
//{
//	A* p = nullptr;
//	p->Print();
//	return 0;
//}
//
//
//
//class A
//{
//	public :
//	void Print()
//	{
//		cout << "A::Print()" << endl;
//		cout << _a << endl;
//	}
//private:
//	int _a;
//};
//int main()
//{
//	A* p = nullptr;
//	p->Print();
//	return 0;
//}


//class Date
//{
//public:
//	Date()
//		:_year(2000)
//		,_month(1)
//		,_day(1)
//	{}
//	Date(int year, int month, int day)
//		:_year(year)
//		, _month(month)
//		, _day(day)
//	{}
//	
//	void Print()
//	{
//		cout << _year << " " << _month << " " << _day << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	Date d1(2020, 5,6);
//	d1.Print();
//	return 0;
//}


//class Date
//{
//public:
//	void Init(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	void Print()
//	{
//		cout << _year << "/" << _month << "/" << _day << endl;
//	}
//
//private:
//	// 这⾥只是声明，没有开空间
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	// Date类实例化出对象d1和d2
//	Date d1;
//	Date d2;
//
//	d1.Init(2024, 3, 31);
//	d1.Print();
//
//	d2.Init(2024, 7, 5);
//	d2.Print();
//
//	return 0;
//}


class Date
{
public :

	// 1.⽆参构造函数
	//Date()
	//{
	//	_year = 1;
	//	_month = 1;
	//	_day = 1;
	//} 

	// 2.带参构造函数
	//Date(int year, int month, int day)
	//{
	//	_year = year;
	//	_month = month;
	//	_day = day;
	//} 

	// 3.全缺省构造函数
	Date(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
		
	void Print()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}

private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	// 如果留下三个构造中的第⼆个带参构造，第⼀个和第三个注释掉
	// 编译报错：error C2512: “Date”: 没有合适的默认构造函数可⽤
	Date d1; // 调⽤默认构造函数

	Date d2(2025, 1, 1); // 调⽤带参的构造函数
	// 注意：如果通过⽆参构造函数创建对象时，对象后⾯不⽤跟括号，否则编译器⽆法
	// 区分这⾥是函数声明还是实例化对象
	// warning C4930: “Date d3(void)”: 未调⽤原型函数(是否是有意⽤变量定义的?)
	//Date d3();
	d1.Print();
	d2.Print();
	return 0;
}


